iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

開頭

終於要把整個資料庫建立起來了,官方文件說建立資料庫的過程很花資源,所以最好使用單例,然後把 Dao 做成抽像類別。

建立 Database

  1. 建立類別後,使用@Database,目前我們只有一個實體,所以entities = [Note::class]
    @Database(entities = [Note::class], version = 1, exportSchema = false)
    abstract class HackNoteDatabase : RoomDatabase() {
    
        abstract val noteDatabaseDao: NoteDatabaseDao        
    }    
    
  2. 假如我們又多了一個使用者(user)實體就會像這樣
    @Database(entities = [Note::class, User::class], version = 1, exportSchema = false)
    abstract class HackNoteDatabase : RoomDatabase() {
    
        abstract val noteDatabaseDao: NoteDatabaseDao        
        abstract val userDatabaseDao: UserDatabaseDao        
    }    
    
  3. 設定資料庫版本用version = 1,以後如果編譯不過就要把版號增加一
    @Database(entities = [Note::class], version = 999, exportSchema = false)
    abstract class HackNoteDatabase : RoomDatabase() {
    
        abstract val noteDatabaseDao: NoteDatabaseDao        
    }    
    
  4. 建立單例,照抄就好,沒什麼好講的
    @Database(entities = [Note::class], version = 1, exportSchema = false)
    abstract class HackNoteDatabase : RoomDatabase() {
    
        abstract val noteDatabaseDao: NoteDatabaseDao
    
        companion object {
    
            @Volatile
            private var INSTANCE: HackNoteDatabase? = null
    
            fun getInstance(context: Context): HackNoteDatabase {
                synchronized(this) {
                    var instance = INSTANCE
    
                    if (instance == null) {
                        instance = Room.databaseBuilder(
                            context.applicationContext,
                            HackNoteDatabase::class.java,
                            "note_database"
                        )
                            .fallbackToDestructiveMigration()
                            .build()
    
                            INSTANCE = instance
                    }
                    return instance
                }
            }
        }
    }
    
  5. 這樣就建立完成

上一篇
111/18 - Room(2/4) - Dao
下一篇
111/20 - Room(4/4) - 連結 ViewDodel
系列文
聽說 HackMD 開放 API 串接,那麼用 Kotlin 寫個筆記 App 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言